package HashMap;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * 7.18 = 如果不重写hc：
 *       两个相同的 new MyKey(1)
 *       不可能找到一个key -> get不出
 *
 */
public class WhyRewriteHashcodeAndEqual {
    public static void main(String[] args) {

        // [当] key 为 自己定义的类 时
        MyKey myKey1 = new MyKey(1);
        Map<MyKey, String> map = new HashMap<>();
        map.put(myKey1, "one");

        // 1 hc eq 都不重写
        /*
            String str = map.get(new MyKey(1));
            System.out.println("我希望是one -> "+str);
            // 我希望是one -> null
            // -> 因为 没重写hc，2个地址，不可能找到 存好的，都没到eq(拉链)就丢了
            System.out.println(myKey1 + " " + new MyKey(1));
            // HashMap.MyKey@1cd072a9 HashMap.MyKey@4c203ea1
            // -> @后面是hc （没重写时 就是地址）
        */

        // 2 现在 重写 hc 让2个key落在一起
        /*

            System.out.println(myKey1 + " " + new MyKey(1));
            // HashMap.MyKey@1 HashMap.MyKey@1
            // -> 这回 *怎么new* 都是一个地址
            System.out.println(map.get(new MyKey(1)));
            // 但 拉链法 需要eq -> 所以还是找不到

        */

        // 3 现在 hc + eq 全重写
        System.out.println(String.format(
                "-> 我要one！ ，结果是：%s",
                map.get(new MyKey(1))
        ));
        // -> 我要one！ ，结果是：one
    }
}
